package com.cdc.retrofit;

import com.cdc.urls.FileResult;
import com.cdc.urls.Person;
import com.cdc.urls.User;

import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * Created by cdc on 2018/4/20.
 */

public interface Api {
    @GET("/api/findPerson")
    Call<ResponseBody> personBody();
    @GET("/api/person/{id}")
    Call<Person> restPathPerson(@Path("id") Integer id);

    @GET("/api/user/{id}")
    Call<User> restPathUser(@Path("id") Integer id);
    //@QuaryMap后面的括号可以省略
    @GET("/api/personBoth")
    Call<Person> personBothQueryMap(@QueryMap() Map<String,Object> paramers);

    @GET("/api/personBoth")
    Call<Person> personBothQuary(@Query("id") Integer id, @Query("name")String name);

    /**
     * 以表单的方式上传  两个参数
     * @param id
     * @param name
     * @return
     */
    @FormUrlEncoded
    @POST("/api/personBoth")
    Call<Person> personBothForm(@Field("id") Integer id, @Field("name") String name);

    @Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头
    @POST("/api/person")
    Call<Person> upPerson(@Body RequestBody  person);

    /**
     * 上传一个文件 和两个参数
     * @param file  用@Part MultipartBody.Part 注解来定义我们要上传的图片文件
     * @param id    用@Part("attribute") RequestBody 直接来定义请求中的字符串字段
     * @param name  用@Part("attribute") RequestBody 直接来定义请求中的字符串字段
     * @return
     */
    @Multipart
    @POST("/api/uploadPerson")
    Call<FileResult> uploadPerson(@Part MultipartBody.Part  file, @Part("id") RequestBody id, @Part("name")   RequestBody name);

    /**
     * 上传一个文件 和两个参数
     * @return
     */
    @POST("/api/uploadPerson")
    Call<FileResult> uploadPerson(@Body RequestBody  fileParamers);


    /**
     * 上传多个文件 和两个参数
     * @param fileParamers
     * @return
     */
    @POST("/api/uploadsPerson")
    Call<FileResult> uploadsPerson(@Body RequestBody  fileParamers);

}
